export const studentListMixin = {
  data () {
    // 验证性别是否男或女
    var checkSex = (rule, value, callback) => {
      if (value === '男' || value === '女') {
        callback()
      }
      callback(new Error('请输入男或女'))
    }
    // 验证手机号
    var checkTel = (rule, value, callback) => {
      // 验证号码的正则表达式
      const telReg = /^(((13[0-9]{1})|(14[0-9]{1})|(15[0-9]{1})|(16[0-9]{1})|(18[0-9]{1})|(19[0-9]{1})|(17[0-9]{1}))+\d{8})$/
      if (telReg.test(value)) {
        return callback()
      }
      callback(new Error('请输入正确的手机号码'))
    }
    return {
      // 添加用户的信息
      addform: {
        studentNumber: '',
        name: '',
        sex: '',
        tower: '',
        dorm: '',
        tel: ''
      },
      // 添加用户信息规则
      formRules: {
        studentNumber: [
          { required: false, message: '请输入学号', trigger: 'blur' },
          { max: 12, min: 12, message: '学号必须是12位', trigger: 'blur' }
        ],
        name: [
          { required: true, message: '请输入姓名', trigger: 'blur' }
        ],
        sex: [
          { required: false, message: '请输入男或女', trigger: 'blur' },
          { validator: checkSex, trigger: 'blur' }
        ],
        tower: [
          { required: false, message: '请输入所在楼宇', trigger: 'blur' }
        ],
        dorm: [
          { required: false, message: '请输入所在宿舍号', trigger: 'blur' }
        ],
        tel: [
          { required: false, message: '请输入电话', trigger: 'blur' },
          { validator: checkTel, trigger: 'blur' }
        ]
      },
      // 修改用户信息规则
      editformRules: {
        name: [
          { required: true, message: '请输入姓名', trigger: 'blur' }
        ],
        sex: [
          { required: false, message: '请输入男或女', trigger: 'blur' },
          { validator: checkSex, trigger: 'blur' }
        ],
        tower: [
          { required: false, message: '请输入所在楼宇', trigger: 'blur' }
        ],
        dorm: [
          { required: false, message: '请输入所在宿舍号', trigger: 'blur' }
        ],
        tel: [
          { required: false, message: '请输入电话', trigger: 'blur' },
          { validator: checkTel, trigger: 'blur' }
        ]
      },
      // 控制对话框弹出
      dialogVisible: false,
      editStudentDialogVisible: false,
      dataList: {
        // 模拟数据
        query: '',
        // 当前页码
        pagenum: 1,
        // 每页显示几条数据
        pagesize: 7

      },
      // 总数
      total: null,
      // 学生列表
      studentList: [],
      // 修改学生信息
      editform: {},
      // excel数据
      excelList: []
    }
  },
  methods: {
    // 给表格添加索引
    indexMethod (index) {
      return (index + 1)
    },
    // 监听Dialog关闭事件
    resetDialog () {
      // console.log(this.$refs.addform)
      // 重置表单，也就是退出dialog后清空原来内容
      // 官方的表单方法resetField后面少了个s，resetFields()才能重置成功
      this.$refs.addform.resetFields()
    },
    // 监听Dialog关闭事件,修改学生信息
    editformCloseClick () {
      this.$refs.editform.resetFields()
    },
    // 删除前确认是否删除
    isDelectClick (id) {
      // console.log(id)
      this.$confirm('此操作将永久删除该学生, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(async () => {
        const { data: res } = await this.$axios.get('/student/deleteStudent', {
          params: {
            id: id._id
          }
        })
        this.getStudentList()
        // console.log(res)
        if (res.code !== -1) {
          this.$message({
            type: 'success',
            message: '删除成功!'
          })
        }
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        })
      })
    },
    // 修改学生信息时,在dialog展示学生信息
    async editStudent (id) {
      this.editStudentDialogVisible = true
      const { data: res } = await this.$axios.get('/student/findStudent', {
        params: {
          query: id.studentNumber
        }
      })
      // console.log(res)
      if (res.meta.code !== 200) {
        return this.$message('获取信息失败')
      } else {
        this.editform = res.result[0]
      }
    },
    // 发送去请求修改学生信息
    editStudentInfo () {
      this.$refs.editform.validate(async valid => {
        if (!valid) return
        const { data: res } = await this.$axios.get('/student/editStudent', {
          params: {
            query: this.editform._id,
            name: this.editform.name,
            sex: this.editform.sex,
            college: this.editform.college,
            class: this.editform.class,
            tower: this.editform.tower,
            dorm: this.editform.dorm,
            tel: this.editform.tel
          }
        })
        if (res.code !== 0) {
          this.$message({
            message: '修改失败',
            type: 'warning'
          })
        } else {
          this.$message({
            message: '修改成功',
            type: 'success'
          })
          this.editStudentDialogVisible = false
          this.getStudentList()
        }
      })
    },
    // 导入和上传excel
    async importExcel (e) {
      // console.log(e)
      // 这里的e是excel组件发送过来的数据，也就是抽离后的excel数据
      e.forEach(valid => {
        // console.log(valid)
        // excel中对应的数据字段
        const obj = {
          studentNumber: valid.学号,
          name: valid.姓名,
          sex: valid.性别,
          college: valid.学院,
          class: valid.班级,
          tower: valid.宿舍,
          dorm: valid.宿舍号,
          tel: valid.电话
        }
        // 保存数据到excelList
        this.excelList.push(obj)
      })
      // console.log(this.excelList)
      // 发送网络请求
      const { data: res } = await this.$axios.get('/student/addExcelData', {
        params: {
          // 将保存在excelList的excel数据转换成json字符串，因为这是要将一个数组上传到koa
          excelList: JSON.stringify(this.excelList)
        }
      })
      // console.log(res)
      if (res.code !== 0) {
        this.$message.warning('添加失败，请确认学号有没有重复或之前是否已经添加过该学生')
        this.$refs.excelRef.removeFile()
        this.excelList = []
        return false
      } else {
        this.$message.success('添加成功,新增内容在最后一页呦！')
        // 移除上传的文件，为了防止后续上传数据的时候造成二次上传
        this.$refs.excelRef.removeFile()
        // 重新获取最新的数据，包括上传的exce展示到前端页面
        this.getStudentList()
        // 清空excelList里面保存有的excel数据，防止二次上传不同excel的数据时造成数据重复
        this.excelList = []
      }
    }
  }
}
